From a8122825b00126c7c3a2b4a1c33f083bc65d2c88 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 20 Jul 2005 20:30:37 +0000 Subject: [PATCH] Make sure expanded expanders are not fuzzy. (#310172, reported by 2005-07-20 Matthias Clasen * gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded expanders are not fuzzy. (#310172, reported by Alexander Larsson, patch by Owen Taylor) --- ChangeLog | 4 ++++ ChangeLog.pre-2-10 | 4 ++++ ChangeLog.pre-2-8 | 4 ++++ gtk/gtkstyle.c | 24 ++++++++++++++++++++---- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index e770d165a2..a2d9804ba2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-07-20 Matthias Clasen + * gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded + expanders are not fuzzy. (#310172, reported by Alexander Larsson, + patch by Owen Taylor) + * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we can't get a keyboard grab. (#168351) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e770d165a2..a2d9804ba2 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,9 @@ 2005-07-20 Matthias Clasen + * gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded + expanders are not fuzzy. (#310172, reported by Alexander Larsson, + patch by Owen Taylor) + * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we can't get a keyboard grab. (#168351) diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index e770d165a2..a2d9804ba2 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,9 @@ 2005-07-20 Matthias Clasen + * gtk/gtkstyle.c (gtk_default_draw_expander): Make sure expanded + expanders are not fuzzy. (#310172, reported by Alexander Larsson, + patch by Owen Taylor) + * gtk/gtkdnd.c (gtk_drag_begin_internal): Don't fail if we can't get a keyboard grab. (#168351) diff --git a/gtk/gtkstyle.c b/gtk/gtkstyle.c index 0ab80a0b62..54ec010152 100644 --- a/gtk/gtkstyle.c +++ b/gtk/gtkstyle.c @@ -4785,6 +4785,9 @@ gtk_default_draw_expander (GtkStyle *style, double vertical_overshoot; int diameter; double radius; + double interp; /* interpolation factor for center position */ + double x_double_horz, y_double_horz; + double x_double_vert, y_double_vert; double x_double, y_double; gint degrees = 0; @@ -4813,15 +4816,19 @@ gtk_default_draw_expander (GtkStyle *style, { case GTK_EXPANDER_COLLAPSED: degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 180 : 0; + interp = 0.0; break; case GTK_EXPANDER_SEMI_COLLAPSED: degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 150 : 30; + interp = 0.25; break; case GTK_EXPANDER_SEMI_EXPANDED: degrees = (get_direction (widget) == GTK_TEXT_DIR_RTL) ? 120 : 60; + interp = 0.75; break; case GTK_EXPANDER_EXPANDED: degrees = 90; + interp = 1.0; break; default: g_assert_not_reached (); @@ -4845,17 +4852,26 @@ gtk_default_draw_expander (GtkStyle *style, diameter = MAX (3, expander_size - 2 * vertical_overshoot); /* If the line width is odd, we want the diameter to be even, - * and vice versa, so force the sum to be odd + * and vice versa, so force the sum to be odd. This relationship + * makes the point of the triangle look right. */ diameter -= (1 - (diameter + line_width) % 2); radius = diameter / 2.; /* Adjust the center so that the stroke is properly aligned with - * the pixel grid + * the pixel grid. The center adjustment is different for the + * horizontal and vertical orientations. For intermediate positions + * we interpolate between the two. */ - x_double = floor (x - (radius + line_width) / 2.) + (radius + line_width) / 2.; - y_double = y + 0.5; + x_double_vert = floor (x - (radius + line_width) / 2.) + (radius + line_width) / 2.; + y_double_vert = y - 0.5; + + x_double_horz = x - 0.5; + y_double_horz = floor (y - (radius + line_width) / 2.) + (radius + line_width) / 2.; + + x_double = x_double_vert * (1 - interp) + x_double_horz * interp; + y_double = y_double_vert * (1 - interp) + y_double_horz * interp; cairo_translate (cr, x_double, y_double); cairo_rotate (cr, degrees * G_PI / 180); -- 2.30.2